package com.wtx.chapter02;

import java.awt.event.ActionListener;
import java.util.function.BinaryOperator;

/**
 * @description: lambda表达式的不同形式
 * @author: wtx
 * @createDate: 2020/5/31
 */
public class Test {
    public static void main(String[] args) {

        //1、()表示没有参数
        Runnable runnable1 = () -> System.out.println("Hello world");
        //2、只有一个参数, 括号可以省略
        ActionListener actionListener = e -> System.out.println("button clicked");
        //3、多行代码需要使用大括号, 一行不必要
        Runnable runnable2 = () -> {
            System.out.println("hello");
            System.out.println("world");
        };
        //4、javac 会根据程序的上下文(这里指对应方法的签名)在后台推断出了参数的类型
        BinaryOperator<Long> add = (aLong, aLong2) -> aLong+aLong2;
        //5、不过最好还是显式地声明参数的类型, 可读性更强
        BinaryOperator<Long> addExplicit = (Long x, Long y) -> x+y;

        //目标类型: Lanmbda 表达式所在上下文环境的类型。
        //在1中, lambda的类型就是 Runnable
    }
}
